package main

import "fmt"

var g = "全局变量"

func getUserInfo() (string, int) {
	return "小皮皮", 1
}

func main() {
	/*
		1、var声明变量，语法格式：var 变量名 变量类型 = 初始值
		变量名称命名规则：首字母必须是字母或下划线，后续可以是字母、数字或下划线
		变量类型：int、float32、float64、bool、string、complex64、complex128
		初始值：如果没有初始值，则变量的默认值是0、false、""
	*/
	// var username string = "小皮皮"
	// fmt.Println("username:", username)

	// var a1 = "小阿皮"

	// fmt.Println("a1:", a1)

	// var m_ = "小皮皮" // 正确 不推荐
	// fmt.Println("m_:", m_)

	// go语言变量的定义以及初始化
	// 第一种初始化变量的方式
	// var username string
	// username = "小皮皮"
	// fmt.Println("username:", username)

	// 第二种初始化变量的方式
	// var username string = "小皮皮"
	// fmt.Println("username:", username)

	// 第三种初始化变量的方式
	// var username = "小皮皮"
	// fmt.Println("username:", username)

	// 第四种初始化变量的方式
	// username := "小皮皮"
	// fmt.Println("username:", username)

	/*
		2、一次定义多个变量
		var 变量名称，变量名称 类型
		var (
			变量名称 类型
			变量名称 类型
		)
	*/
	// var a1, a2 string
	// a1 = "小阿皮"
	// a2 = "小皮皮"
	// fmt.Println("a1:", a1)
	// fmt.Println("a2:", a2)

	// var (
	// 	username string
	// 	age      int
	// )
	// username = "小阿皮"
	// age = 1

	// fmt.Println("username:", username)
	// fmt.Println("age:", age)

	// var (
	// 	username = "小皮皮"
	// 	age      = 1
	// )
	// fmt.Println("username:", username)
	// fmt.Println("age:", age)

	/*
		3、短变量声明法，在函数内部，可以使用更简略的 := 语法声明变量，省去 var 关键字，但只能用在函数内部，不能用于包级变量的声明。
	*/

	// username := "小皮皮"
	// fmt.Println("username:", username)
	// fmt.Printf("类型:%T", username)

	// 使用短变量一次声明多个变量，并初始化变量
	// a, b, c := 1, 2, "小皮皮"
	// fmt.Println(a, b, c)
	// fmt.Printf("a类型:%T b类型:%T c类型:%T\n", a, b, c)
	// fmt.Println(g)

	/*
		4、 匿名变量 在使用多重赋值时，如果想要忽略某个值，可以使用匿名变量 _，语法格式：
		匿名变量不占用命名空间，可以用在任何地方，所以匿名变量之间不存在重复声明的情况。
	*/
	var username, _ = getUserInfo()
	fmt.Println("username:", username)
}
